Leetcode #206. Reverse Linked List
簡單來說這一題要做反轉鏈結
ex.
input:  1->2->3->4
output: 4->3->2->1
如果你沒做過這題,強烈建議你先思考一下怎麼解。
防雷 
防雷 
防雷 
最直覺的方式可以新建一個slice([]*ListNode),去把全部的節點都放進去,最後slice從尾去讀取,重新建一個鏈結就行了。
這樣做的時間複雜度為O(n),空間複雜性O(n)要用slice存下鏈結的地址。
現在為大家介紹一個更好的解法,可以省下一些記憶體。
先來看一下它的流程:
1 2 3 4
2 1 3 4
3 2 1 4
4 3 2 1
每一次新節點都把第一個節點接在後面,當你跑完本個鏈結,就完成反轉了。
來看一下程式:
func reverseLinkedList(head *ListNode) *ListNode {
	// prevNode一開始為是空
	// 這樣第一個節點的next會接到nil,才不會造成無限的鏈結
	var prevNode *ListNode
	currentNode := head
	// 節點交換的過程
	for currentNode != nil {
		temp := currentNode.Next
		currentNode.Next = prevNode // 最前面的節點接到目前節點的後面
		prevNode = currentNode
		currentNode = temp
	}
	return prevNode // 回傳第一個節點
}
明天來解其他題目~